// RAP [bm]: no animations ///******************************************************************************* // * Copyright (c) 2007, 2008 IBM Corporation and others. // * All rights reserved. This program and the accompanying materials // * are made available under the terms of the Eclipse Public License v1.0 // * which accompanies this distribution, and is available at // * http://www.eclipse.org/legal/epl-v10.html // * // * Contributors: // * IBM Corporation - initial API and implementation // ******************************************************************************/ //package org.eclipse.ui.internal; // //import org.eclipse.core.runtime.IProgressMonitor; //import org.eclipse.core.runtime.IStatus; //import org.eclipse.core.runtime.Status; //import org.eclipse.core.runtime.jobs.Job; //import org.eclipse.jface.preference.IPreferenceStore; //import org.eclipse.swt.events.DisposeEvent; //import org.eclipse.swt.events.DisposeListener; //import org.eclipse.swt.graphics.Rectangle; //import org.eclipse.swt.widgets.Display; //import org.eclipse.swt.widgets.Shell; //import org.eclipse.ui.IWorkbenchPreferenceConstants; //import org.eclipse.ui.internal.tweaklets.Animations; //import org.eclipse.ui.internal.tweaklets.Tweaklets; //import org.eclipse.ui.internal.util.PrefUtil; // ///** // * This job creates an Animation Engine that uses an Animation Feedback to render // * the animation. To begin the animation, instantiate this // * object then call schedule(). // * @since 3.3 // * // */ //public class AnimationEngine extends Job { // public static final int TICK_TIMER = 1; // public static final int FRAME_COUNT = 2; // public static final int unlimitedDuration = -1; // // private boolean enableAnimations; // private long startTime; // private long curTime; // private long prevTime; // private int timingStyle = TICK_TIMER; // private long frameCount; // private long stepCount; // private boolean animationCanceled = false; // private long sleepAmount; // // private Display display; // private AnimationFeedbackBase feedbackRenderer; // private int duration; // // public AnimationEngine(AnimationFeedbackBase animationFeedback, // int durationIn) { // this(animationFeedback, durationIn, 0); // } // // /** // * Creates an Animation that will run for the given number of milliseconds. // * // * @param animationFeedback provides renderStep(), initialize() and jobInit() methods // * @param durationIn number of milliseconds over which the animation will run // * @param sleepAmountIn number of milliseconds to slow/delay the animation // */ // public AnimationEngine(AnimationFeedbackBase animationFeedback, // int durationIn, long sleepAmountIn) { // super(WorkbenchMessages.RectangleAnimation_Animating_Rectangle); // sleepAmount = sleepAmountIn; // feedbackRenderer = animationFeedback; // duration = durationIn; // // // if animations aren't on this is a NO-OP // IPreferenceStore preferenceStore = PrefUtil.getAPIPreferenceStore(); // enableAnimations = preferenceStore // .getBoolean(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS); // if (!enableAnimations) { // return; // } // // animationCanceled = false; // // // Capture parameters // display = feedbackRenderer.getAnimationShell().getDisplay(); // // animationFeedback.getAnimationShell().addDisposeListener(new DisposeListener() { // public void widgetDisposed(DisposeEvent e) { // cancelAnimation(); // } // }); // // // Don't show the job in monitors // setSystem(true); // // // Set it up // feedbackRenderer.initialize(this); // // // Set the animation's initial state // stepCount = 0; // curTime = startTime = System.currentTimeMillis(); // // } // // /** // * @return The current renderer // */ // public AnimationFeedbackBase getFeedback() { // return feedbackRenderer; // } // // private Runnable animationStep = new Runnable() { // // public void run() { // if (animationCanceled) // return; // // // Capture time // prevTime = curTime; // curTime = System.currentTimeMillis(); // // if (isUpdateStep()) { // updateDisplay(); // frameCount++; // } // stepCount++; // } // // }; // // protected void updateDisplay() { // if (animationCanceled) // return; // // feedbackRenderer.renderStep(this); // } // // protected boolean isUpdateStep() { // if (duration == unlimitedDuration || timingStyle == FRAME_COUNT) { // return true; // } // // // Default to 'TICK_TIMER', update when the system timer changes // return prevTime != curTime; // } // // private boolean done() { // return animationCanceled || amount() >= 1.0; // } // // public double amount() { // if (duration == unlimitedDuration) { // return 0; // } // double amount = 0.0; // switch (timingStyle) { // case TICK_TIMER: // amount = (double) (curTime - startTime) / (double) duration; // break; // // // For testing purposes // case FRAME_COUNT: // amount = (double) frameCount / (double) duration; // } // // if (amount > 1.0) // amount = 1.0; // // return amount; // } // // protected IStatus run(IProgressMonitor monitor) { // // We use preference value to indicate that the animation should be skipped on this platform. // if (!enableAnimations) { // return Status.OK_STATUS; // } // // // We're starting, initialize // display.syncExec(new Runnable() { // public void run() { // // 'jobInit' returns 'false' if it doesn't want to run... // if (!animationCanceled) // animationCanceled = !feedbackRenderer.jobInit(AnimationEngine.this); // } // }); // // if (animationCanceled) // return Status.CANCEL_STATUS; // // // Only start the animation timer -after- we've initialized // curTime = startTime = System.currentTimeMillis(); // // while (!done() && !animationCanceled) { // display.syncExec(animationStep); // // // Don't pin the CPU // try { // Thread.sleep(sleepAmount); // } catch (InterruptedException e) { // } // } // // if (animationCanceled) // return Status.CANCEL_STATUS; // // // We're done, clean up // display.syncExec(new Runnable() { // public void run() { // feedbackRenderer.dispose(); // } // }); // // return Status.OK_STATUS; // } // // public void cancelAnimation() { // animationCanceled = true; // feedbackRenderer.dispose(); // cancel(); // } // // public long getFrameCount() { // return frameCount; // } // // public static void createTweakedAnimation(Shell shell, int duration, Rectangle start, Rectangle end) { // RectangleAnimationFeedbackBase feedback = ((Animations) Tweaklets // .get(Animations.KEY)).createFeedback(shell); // feedback.addStartRect(start); // feedback.addEndRect(end); // // AnimationEngine animation = new AnimationEngine(feedback, 400); // animation.schedule(); // } //}